import { isNilOrEmpty } from "qx-util";
import { AuthGuard } from "@/guard";
import { getAllPages } from "@/utils";

/**
 * 导航状态
 */
let navigating = false;

/**
 * 白名单页面
 */
const WhiteListPages = getAllPages("needLogin", false).map((page) => page.path);

/**
 * 拦截器
 */
const navigateToInterceptor = {
  invoke(args: IData) {
    const path = args.url.split('?')[0];
    // 白名单直接返回
    if (WhiteListPages.includes(path)) {
      return args;
    }
    // 如果正在导航，直接返回原参数
    if (navigating) {
      return Promise.reject();
    }
    // 设置标志位为正在导航
    if (isNilOrEmpty(ibiz.appData)) {
      navigating = true;
      // 鉴权
      return AuthGuard()
        .then((result) => {
          return result ? args : Promise.reject();
        })
        .finally(() => {
          navigating = false;
        });
    }
    return args;
  },
};

export const routeInterceptor = {
  install() {
    // 打开新页面
    uni.addInterceptor("navigateTo", navigateToInterceptor);
    // 页面重定向
    uni.addInterceptor("redirectTo", navigateToInterceptor);
    // tab切换
    uni.addInterceptor("switchTab", navigateToInterceptor);
    // 重加载
    uni.addInterceptor("reLaunch", navigateToInterceptor);
  },
};
